<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>基本数据类型和引用</title>
    <script>
        /* 基本数据类型和引用 */
        /* 
        基本数据类型
        String Number Boolean Null Undefined

        引用数据类型
        Object

        JS中的变量都是保存到栈内存中
            基本数据类型
            基本数据类型的值直接在栈内存中 存储，
            值与变量之间是独立的，修改一个变量不会影响到其他的变量

            引用数据类型（对象）
            对象是保存在堆内存中，每创建一个新的对象，就会在堆内存中开辟出一个新的内存空间
            变量保存的是对象的内存地址（对象的引用）
            如果两个变量保存的是同一个变量的引用，当一个通过一个变量改属性时，另一个也受到影响


        用构造函数创建对象
        var obj = new Object();
        
            
        */
        var a = 123;
        var b = a;
        a++;
        document.write(a);
        document.write(b);
        var obj = new Object();
        obj.name = "aaa";
        var obj2 = obj;
        //修改obj的name属性
        obj.name = "bbb";
        //设置obj2为null
        obj2 = null;
        console.log(obj.name);
        console.log(obj2.name);
        console.log(obj);
        console.log(obj2);
        var c = 10;
        var d = 10;
        var obj3 = new Object();
        var obj4 = new Object();
        obj3.name = "孙悟空";
        obj4.name = "孙悟空";
        console.log(obj3);
        console.log(obj4);
        //两个对象不同，在堆内存中的地址不同
        /* 
        当比较两个基本数据类型时，就是比较值
        比较两个引用数据类型时，比较的是两个对象的内存地址
            如果两个对象是一摸一样，但是地址不同，它也会返回false
        */
        console.log(obj3 == obj4); //false
    </script>
</head>

<body>

</body>

</html>